import pandas as pd
import os

# 读取地理位置数据 CSV 文件
geo_file = "地理位置.csv"
geo_data = pd.read_csv(geo_file)
def merge_csv_files(input_folder, output_file):
    # 获取文件夹中的所有 CSV 文件
    csv_files = [f for f in os.listdir(input_folder) if f.endswith('.csv')]

    # 创建一个空的 DataFrame 用于合并数据
    combined_data = pd.DataFrame()

    # 定义“劳动技能”列值的映射字典
    labor_skill_mapping = {
                    '普通劳动力': 0,
                    '无劳动力': 1,
                    '丧失劳动力': 2,
                    '弱劳动力或半劳动力': 3,
                    '技能劳动力': 4
                }
    poverty_cause_mapping = {
            '自身发展动力不足': 0,
            '因残': 1,
            '因病': 2,
            '缺劳力': 3,
            '缺技术': 4,
            '缺资金': 5,
            '因学': 6,
            '缺土地': 7,
            '因灾': 8,
            '其他': 9,
            '因丧': 10,
            '因婚': 11,
            '交通条件落后': 12,
            '缺水': 13,
            '因疫情': 14
        }
    education_level_mapping = {
        '文盲或半文盲': 0,
        '小学': 1,
        '初中': 2,
        '高中': 3,
        '大专': 4,
        '本科及以上': 5
    }

    # 遍历所有的 CSV 文件
    for file in csv_files:
        # 获取年份（假设文件名格式为 20xx年.csv）
        year = int(file.split('年')[0])

        # 构建文件的完整路径
        file_path = os.path.join(input_folder, file)

        # 读取 CSV 文件
        df = pd.read_csv(file_path)

        # 在 DataFrame 前面添加一列 'Year'，值为当前文件的年份
        df['年份'] = year

        if year < 2020:
            df.rename(columns={'参加大病医疗': '是否参加大病保险'}, inplace=True)  # 列名修改为“是否参加大病保险”
            # 处理“是否参加大病保险”列
            df['是否参加大病保险'] = df['是否参加大病保险'].replace({'是': 1, '否': 0, '': 0, None: 0})
        else:
            df.rename(columns={'参加大病医疗': '是否参加大病保险'}, inplace=True)  # 列名修改为“是否参加大病保险”
            # 处理“是否参加大病保险”列
            df['是否参加大病保险'] = df['是否参加大病保险'].replace({'是': 1, '否': 0, '': 0, None: 0})

        df['是否解决安全饮用水'] = df['是否解决安全饮用水'].replace({'是': 1, '否': 0, '': 0, None: 0})
        if '劳动技能' in df.columns:
            df['劳动技能'] = df['劳动技能'].replace(labor_skill_mapping)
            df['劳动技能'] = df['劳动技能'].fillna(-1)

        if '致贫原因1' in df.columns:
            df['致贫原因1'] = df['致贫原因1'].replace(poverty_cause_mapping)
            df['致贫原因1'] = df['致贫原因1'].fillna(-1)

        if '危房户' in df.columns:
            df['危房户'] = df['危房户'].replace({'是': 1, '否': 0, '': 0, None: 0})

        if '文化程度' in df.columns:
            df['文化程度'] = df['文化程度'].replace(education_level_mapping)
            df['文化程度'] = df['文化程度'].fillna(-1)


        # 将当前数据合并到 combined_data 中
        combined_data = pd.concat([combined_data, df], ignore_index=True)

    # 合并地理位置数据，依据省,市,县,乡(镇),村进行合并
    final_data_with_geo = pd.merge(combined_data, geo_data, how='inner',
                                   left_on=['县(市、区、旗)', '乡(镇)', '行政村'],
                                   right_on=['县', '乡(镇)', '村'])
    # 将合并后的数据保存到新的 CSV 文件中
    final_data_with_geo.to_csv(output_file, index=False, encoding='utf-8')
    print(f"合并完成！合并后的数据已保存为 {output_file}")
    print("劳动技能列的所有取值：")
    print(final_data_with_geo['劳动技能'].unique())
    print("致贫原因1列的所有取值：")
    print(combined_data['致贫原因1'].unique())
    print("脱贫年度的所有取值：")
    print(combined_data['脱贫年度'].unique())
    print("文化程度的所有取值：")
    print(combined_data['文化程度'].unique())
    print("健康状况的所有取值：")
    print(combined_data['健康状况'].unique())


# 使用示例：
input_folder = 'yearsdata'  # 输入你的文件夹路径
output_file = 'data/2018-2024年农户数据汇总（人）.csv'  # 输出文件名
merge_csv_files(input_folder, output_file)

